/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mindbox.mueblesalpes.negocio.entity;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 * Clase que representa el valor de una categoria de cobro a un cliente.
 * @author jsanchez
 */
@Entity
@Table(name="categoria_valor")
public class CategoriaValor implements Serializable,Cloneable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_CATEGORIAVALOR")
    @SequenceGenerator(name = "SEQ_CATEGORIAVALOR", allocationSize = 1, sequenceName = "categoriavalor_seq")
    private Long idCategoriaValor;
    private String nombreCategoria;
    private String descripcion;
    private double valor;

    @ManyToOne
    @JoinColumn(name="idVenta")
    private Venta venta;

    /**
     *
     */
    public CategoriaValor() {
        this("","",0.0);
    }

    /**
     * Contruye unaa Categoría valor.
     * @param nombreCategoria
     * @param descripcion
     * @param valor
     */
    public CategoriaValor(String nombreCategoria, String descripcion, double valor) {
        this.nombreCategoria = nombreCategoria;
        this.descripcion = descripcion;
        this.valor = valor;
    }

    /**
     * Obtiene la descripción
     * @return String
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * Coloca la descripcion
     * @param descripcion
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    /**
     * Obtiene el nombre de la categoria
     * @return String
     */
    public String getNombreCategoria() {
        return nombreCategoria;
    }

    /**
     * Coloca el nombre de la categoria
     * @param nombreCategoria
     */
    public void setNombreCategoria(String nombreCategoria) {
        this.nombreCategoria = nombreCategoria;
    }

    /**
     * Obtiene el valor
     * @return double
     */
    public double getValor() {
        return valor;
    }

    /**
     * Coloca el valor
     * @param valor
     */
    public void setValor(double valor) {
        this.valor = valor;
    }

    /**
     * Obtiene el id
     * @return Long
     */
    public Long getIdCategoriaValor() {
        return idCategoriaValor;
    }

    /**
     * Coloca el Id
     * @param idCategoriaValor
     */
    public void setIdCategoriaValor(Long idCategoriaValor) {
        this.idCategoriaValor = idCategoriaValor;
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        CategoriaValor cv = new CategoriaValor();
        cv.setDescripcion(this.getDescripcion());
        cv.setIdCategoriaValor(this.getIdCategoriaValor());
        cv.setNombreCategoria(this.getNombreCategoria());
        cv.setValor(this.getValor());
        return cv;
    }

    @Override
    public boolean equals(Object obj) {
        if(obj != null && obj instanceof CategoriaValor &&
                this.getIdCategoriaValor() != null &&
                ((CategoriaValor)obj).getIdCategoriaValor() != null)
            return this.getIdCategoriaValor().equals(((CategoriaValor)obj).getIdCategoriaValor());
        return false;
    }

    @Override
    public int hashCode() {
        if(this.getIdCategoriaValor() == null)
            return 0;
        return this.getIdCategoriaValor().hashCode();
    }

    /**
     * Obtiene la venta asociada a esta categoria
     * @return Venta
     */
    public Venta getVenta() {
        return venta;
    }

    /**
     * Coloca la venta asociada a esta categoria
     * @param venta
     */
    public void setVenta(Venta venta) {
        this.venta = venta;
    }
}